package com.halfsword.creativecraft.modules.interfaces;

import net.minecraft.world.item.ItemStack;
import net.minecraft.world.item.crafting.Recipe;

/**
 * 配方处理功能接口
 * 提供配方处理功能的模块应实现此接口
 */
public interface IRecipeHandlerFacet extends IMachineModule {

    /**
     * 更新当前配方
     */
    void updateCurrentRecipe();

    /**
     * 是否有活动的配方
     * @return 是否有活动的配方
     */
    boolean hasActiveRecipe();

    /**
     * 消耗输入材料
     * @param units 消耗的单位数量
     */
    void consumeInputs(int units);

    /**
     * 获取主产品输出
     * @return 主产品ItemStack
     */
    ItemStack getMainOutputProduct();

    /**
     * 获取副产品输出
     * @return 副产品ItemStack
     */
    ItemStack getByproductOutput();

    /**
     * 配方变化时的回调
     */
    void onRecipeChanged();

    /**
     * 获取当前进度
     * @return 当前进度
     */
    int getProgress();

    /**
     * 获取最大进度
     * @return 最大进度
     */
    int getMaxProgress();

    /**
     * 设置进度
     * @param progress 进度值
     */
    void setProgress(int progress);

    /**
     * 设置最大进度
     * @param maxProgress 最大进度值
     */
    void setMaxProgress(int maxProgress);

    /**
     * 获取当前配方
     * @return 当前配方，如果没有活动配方则返回null
     */
    Recipe<?> getCurrentRecipe();

    /**
     * 检查是否有足够的输入材料
     * @return 是否有足够的输入材料
     */
    boolean hasInput();

    /**
     * 检查输出槽是否有足够的空间
     * @return 输出槽是否有足够的空间
     */
    boolean hasOutputSpace();

    /**
     * 获取进度百分比
     * @return 进度百分比（0.0-1.0）
     */
    default float getProgressPercent() {
        int max = getMaxProgress();
        if (max <= 0) return 0;
        return (float) getProgress() / max;
    }

    /**
     * 计算批次大小
     * @return 批次大小
     */
    int calculateBatchSize();
}